package consumer.config;

import org.springframework.amqp.core.Binding;
import org.springframework.amqp.core.BindingBuilder;
import org.springframework.amqp.core.FanoutExchange;
import org.springframework.amqp.core.Queue;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

/**
 * 定义交换机,队列和其绑定
 * 使用FanoutExchange类型，它会将消息广播到所有绑定的队列，而不考虑任何routing key
 */
@Configuration
public class FanoutConfig {
    /**
     * 声明交换机
     * @return 返回一个名为"firefly.fanout"的FanoutExchange实例
     */
    @Bean
    public FanoutExchange fanoutExchange(){
        return new FanoutExchange("firefly.fanout");
    }


    /**
     * 声明队列
     * @return 返回一个名为"fanout.queue11"的Queue实例
     */
    @Bean
    public Queue fanoutQueue1(){
        return new Queue("fanout.queue11");
    }

    /**
     * 绑定交换机和队列
     * @param fanoutQueue1 队列1
     * @param fanoutExchange 交换机
     * @return 返回一个Binding实例，将队列1绑定到交换机
     */
    @Bean
    public Binding bindExchangeAndQueue1(Queue fanoutQueue1, FanoutExchange fanoutExchange){
        return BindingBuilder.bind(fanoutQueue1).to(fanoutExchange);
    }

    /**
     * 声明队列
     * @return 返回一个名为"fanout.queue22"的Queue实例
     */
    @Bean
    public Queue fanoutQueue2(){
        return new Queue("fanout.queue22");
    }

    /**
     * 绑定交换机和队列
     * @param fanoutQueue2 队列2
     * @param fanoutExchange 交换机
     * @return 返回一个Binding实例，将队列2绑定到交换机
     */
    @Bean
    public Binding bindExchangeAndQueue2(Queue fanoutQueue2, FanoutExchange  fanoutExchange){
        return BindingBuilder.bind(fanoutQueue2).to(fanoutExchange);
    }

}
